不同版本SDK编程请参考相应的Demo文件,本文使用2.1.3.9版本SDK,该版本提供keil5环境静态库,设备SDK文件目录如下:
- libhlDeviceSdk.chm文件:设备SDK中数据结构以及API接口说明文件;
- libhlDeviceSdk.h文件:设备SDK头文件;
- libhlServerDeviceSDK.lib:keil5环境静态库;
- hlDevSdk_hardinterface.h与hlDevSdk_hardinterface.c文件:设备SDK底层数据收发函数接口;
- HailinLinkCard.h文件:未使用;
设备接入流程:
- 注册“鸣”云平台用户;
- “设备管理”模块下“设备属性信息维护”页中,“新建”设备;
- 填写新建设备数据,点击“确定”添加;
- 记下新建设备码与设备类型码,SDK中需要配置这两个参数;
- 使能设备SDK环境函数:
void initSdkEnv(void);
- 配置设备SDK环境参数:
SSdkConfigParam sCfgParam; sCfgParam.s_nHeartbeatCycle = 60; // 建议设置为60秒 sCfgParam.s_nDeviceType = Ehl_DeviceTypeCode_universalityNoVidDev; // 通用非视频类设备类型码 sCfgParam.s_nSocketfd = socket(AF_INET, SOCK_STREAM, 0); // 创建socket句柄 memcpy(sCfgParam.s_sDeviceSn, "XXXXXX8895FEFABC8895FEFABC88XXXX", 32); // 新建通用设备的设备码 memcpy(sCfgParam.s_sServAddr, "192.168.1.XXX", 14); // 配置服务器IP地址或者服务器域名 memcpy(sCfgParam.s_sLocalIP, "192.168.1.174", 14); // 配置设备本地IP地址 memcpy(sCfgParam.s_sDeviceName, "commNoVideoControlDevice", 26); // 配置新建设备名称 configSdkParam(&sCfgParam); // 配置SDK参数
- 注册设备SDK网络接口函数:
/** * @brief temp_sendNByts:例程注册用send回调函数 * @author HaiLin.toraloo * @param[in] nscokfd socket句柄 * @param[in] vptr 发送数据指针 * @param[in] nDatalen 发送数据长度 * @return * - 0: socket关闭 * - -1: 发送异常 * - >0: 发送字节数 * @warning 警告: 传入参数不能为空 */ static int socket_send(int nscokfd, const char *vptr, int nDatalen); /** * @brief temp_connect:例程注册用connect回调函数 * @author HaiLin.toraloo * @param[in] nscokfd socket句柄 * @param[in] pIPAddr 连接IP地址 * @param[in] nport 端口号 * @return * - 0: 成功 * - -1: 连接失败 * @warning 警告: 传入参数不能为空 */ static int socket_connect(int nfd, const char *pIPAddr, int nport); /** * @brief temp_recv:例程注册用recv回调函数 * @author HaiLin.toraloo * @param[in] nscokfd socket句柄 * @param[in] pRecvbuf 接收缓存 * @param[in] nRecvlen 接收缓存长度 * @return * - 0: socket关闭 * - -1: 接收异常 * - >0: 接收到字节数 * @warning 警告: 传入参数不能为空 */ static int socket_recv(int nfd, char *pRecvbuf, int nRecvlen); /*------------------------------------------------------------------------------------*/ SNetworkInterface sNetApi; sNetApi.pCloseSocket = NULL; // close注册函数指针 sNetApi.pCreateSocket = NULL; // socket创建注册函数指针 sNetApi.pConnectfx = temp_connect; // connect注册函数指针 sNetApi.pRecvfx = temp_recv; // recv注册函数指针 sNetApi.pSendfx = temp_sendNByts; // send注册函数指针 /*------------------------------------------------------------------------------------*/ registerNetworkApi(&sNetApi); // 向SDK注册网络回调函数指针
- 注册设备SDK事件回调处理函数:
/** * @brief serverCommandDealfunction:接收事件处理回调函数 * @author HaiLin.toraloo * @param[in] param 用户传入参数 * @param[in] nCmdCode 事件码 * @param[in] pPktDat 事件数据 * @param[in] nPktlen 事件数据长度 * @return 暂无意义 * @warning 警告: 传入参数不能为空 */ static int serverCommandDealfunction(void *param, int32_t nCmdCode, const char *pPktDat, uint32_t nPktlen); /*-------------------------------------------------------------------------------------*/ SMessageCallbackParam sMsgParam; char *pUserString = "DeviceTestString"; sMsgParam.s_pUserParam = pUserString; // 用户传入回调参数 sMsgParam.s_pMsgCbfx = serverCommandDealfunction; // SDK事件处理回调函数 registerMessageCbfx(&sMsgParam); // 注册SDK回调事件参数 /*-------------------------------------------------------------------------------------*/
- 设备登录服务器:
/** * @brief loginServer:登录服务函数 * @author HaiLin.toraloo * @param[in] pFwVer 设备固件版本号 * @param[in] nExtNodeNum 外接设备数 * @return * - 0:成功 * - -1:接收失败 * - -2:发送失败 * - -3:连接失败 * - -4:接收到错误包 * @warning 警告: 必须配置SDK参数 */ int loginServer(const char *pFwVer, uint8_t nExtNodeNum); /*-------------------------------------------------------*/ nRtn = loginServer("4.1.4.78", 1); // 设备发起登录操作 /*-------------------------------------------------------*/
- 进入SDK事件循环,等待服务器指令,并定时推送设备心跳指令:
/** * @brief hailinProtocolWaitYield:等待服务器事件并让出CPU函数 * @author HaiLin.toraloo * @return * - -1:socket异常关闭 * - 0:无事件返回 * - >0:事件数据长度 * @note 配置SDK参数同时配置网络底层函数指针合集 */ int hailinProtocolWaitYield(void); /*--------------------------------------------------*/ nRtn = hailinProtocolWaitYield(); // 进入SDK处理循环 /*--------------------------------------------------*/
- SDK时间更新函数:
void timer_update_1s(void); // 函数需要每秒调用一次
- Demo代码请参考miotkit固件中的miot_test_demo.c文件;
如需要不同平台的设备SDK库,可将对应平台信息发送至该邮箱地址:toriejiang1991@sina.cn